package ChartOfAccount

import (
	"ToolLibray/jwtx"
	"context"
	"fmt"
	"property_api/internal/svc"
	"property_api/internal/types"
	"property_api/utils/xform"
	"property_service/client/inventory_service"
	"property_service/property_service"

	"github.com/zeromicro/go-zero/core/logx"
)

type InventoryputawayLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewInventoryputawayLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InventoryputawayLogic {
	return &InventoryputawayLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

// 库存入库 :将入库单的资产添加到库存表
func (l *InventoryputawayLogic) Inventoryputaway(req *types.Storage) (resp *types.Response, err error) {
	// 设置租户ID，从上下文中获取
	tenantID := jwtx.GetUserTenantId64(l.ctx)
	// 设置创建用户和更新用户，从上下文中获取
	userIdStr := xform.Int64ToString(jwtx.GetUserId(l.ctx))
	//获取入库清单的表
	data, err := l.svcCtx.InventoryService.InventoryAssetListPage(l.ctx, &inventory_service.InventoryAssetListPageReq{
		Page:  0, // 当前页码
		Limit: 0, // 每页条数
		Where: &inventory_service.InventoryAssetList{
			TenantID:  tenantID,
			ReceiptID: req.Id,
		}, // 查询条件
	})

	//获取入库单里的明细，并添加到库存表
	for _, item := range data.List {
		l.AddKc(item, tenantID, userIdStr)
	}

	//var msg string = fmt.Printf("已处理%d条数据,添加到库存表")

	return &types.Response{
		Code:    200,
		Message: "已处理" + xform.Int64ToString(data.Count) + "条数据至库存",
	}, nil
}

func (l *InventoryputawayLogic) AddKc(item *property_service.InventoryAssetList, tenantID int64, userIdStr string) {
	fmt.Println("得到的对象", item)
	//判断库存表中是否存在该资产
	data, err := l.svcCtx.InventoryService.AssetInventoryPage(l.ctx, &inventory_service.AssetInventoryPageReq{
		Page:  0,
		Limit: 0,
		//查询同一个租户同一个仓库是否有该资产
		Where: &inventory_service.AssetInventory{
			AssetCode: item.AssetCode,
			TenantID:  tenantID,
			StockID:   item.StatusID,
		},
	})
	if err != nil {
		err.Error()
	}
	lss := len(data.List)
	//如果没有数据则需要添加库存
	if lss == 0 {
		// 调用服务层方法，添加资产库存记录
		res, err := l.svcCtx.InventoryService.AssetInventoryAdd(l.ctx, &inventory_service.AssetInventory{
			AssetCode:       item.AssetCode,     // 资产编号
			AssetName:       item.AssetName,     // 资产名称
			AssetCategory:   item.AssetCategory, // 资产类别
			SpecModel:       item.SpecModel,     // 规格型号
			Unit:            "",                 // 单位
			Quantity:        item.Quantity,      // 库存数量
			UseNum:          0,                  // 已使用数量
			SafetyStock:     0,                  // 安全库存
			StorageLocation: "",                 // 存放地点
			PurchasePrice:   0,                  // 采购价格
			StockID:         item.StatusID,      // 仓库ID
			TenantID:        tenantID,           // 租户ID
			CreatedAtuser:   userIdStr,          // 创建人
			UpdatedAtuser:   userIdStr,          // 更新人
		})
		// 如果服务层返回错误，返回统一的错误响应
		if err != nil {
			err.Error()
		} else {
			fmt.Println("添加成功:	", res.Message)
		}
	} else if lss == 1 {
		//查到一条，组需要将这条数据的数量加一

	} else {
		fmt.Errorf("资产数据异常，编码: %s 名称：%s", item.AssetCode, item.AssetName)
	}

	fmt.Println("data", data.List)
	//如果有则直接数量加一
	//如果没有则需要添加并需要审核数据
}
